//+------------------------------------------------------------------+
//|                                                      DealInfo.mqh |
//|                             Copyright 2000-2025, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#include <Object.h>

//+------------------------------------------------------------------+
//| 交易历史信息类                                                   |
//| 用途：访问历史交易信息的类                                       |
//|         继承自 CObject 类                                        |
//+------------------------------------------------------------------+
class CDealInfo : public CObject
{
protected:
   ulong             m_ticket;             // 历史订单的ticket

public:
   /** 构造函数 */
   CDealInfo(void);
   
   /** 析构函数 */
   ~CDealInfo(void);
   
   /**
    * 设置交易ticket
    * @param ticket 交易ticket
    */
   void              Ticket(const ulong ticket);
   
   /**
    * 获取交易ticket
    * @return 交易ticket
    */
   ulong             Ticket(void) const;
   
   /**
    * 获取关联的订单号
    * @return 订单号
    */
   long              Order(void) const;
   
   /**
    * 获取交易时间
    * @return 交易时间
    */
   datetime          Time(void) const;
   
   /**
    * 获取交易时间（毫秒）
    * @return 交易时间（毫秒）
    */
   ulong             TimeMsc(void) const;
   
   /**
    * 获取交易类型
    * @return 交易类型枚举值
    */
   ENUM_DEAL_TYPE    DealType(void) const;
   
   /**
    * 获取交易类型描述
    * @return 交易类型描述字符串
    */
   string            TypeDescription(void) const;
   
   /**
    * 获取交易方向
    * @return 交易方向枚举值
    */
   ENUM_DEAL_ENTRY   Entry(void) const;
   
   /**
    * 获取交易方向描述
    * @return 交易方向描述字符串
    */
   string            EntryDescription(void) const;
   
   /**
    * 获取交易魔术码
    * @return 魔术码
    */
   long              Magic(void) const;
   
   /**
    * 获取持仓ID
    * @return 持仓ID
    */
   long              PositionId(void) const;
   
   /**
    * 获取交易量
    * @return 交易量
    */
   double            Volume(void) const;
   
   /**
    * 获取交易价格
    * @return 交易价格
    */
   double            Price(void) const;
   
   /**
    * 获取佣金
    * @return 佣金
    */
   double            Commission(void) const;
   
   /**
    * 获取隔夜利息
    * @return 隔夜利息
    */
   double            Swap(void) const;
   
   /**
    * 获取利润
    * @return 利润
    */
   double            Profit(void) const;
   
   /**
    * 获取交易品种
    * @return 交易品种
    */
   string            Symbol(void) const;
   
   /**
    * 获取交易注释
    * @return 交易注释
    */
   string            Comment(void) const;
   
   /**
    * 获取外部ID
    * @return 外部ID
    */
   string            ExternalId(void) const;
   
   /**
    * 获取整数型交易信息
    * @param prop_id 属性ID
    * @param var 输出值
    * @return 成功返回 true，失败返回 false
    */
   bool              InfoInteger(ENUM_DEAL_PROPERTY_INTEGER prop_id, long &var) const;
   
   /**
    * 获取浮点型交易信息
    * @param prop_id 属性ID
    * @param var 输出值
    * @return 成功返回 true，失败返回 false
    */
   bool              InfoDouble(ENUM_DEAL_PROPERTY_DOUBLE prop_id, double &var) const;
   
   /**
    * 获取字符串型交易信息
    * @param prop_id 属性ID
    * @param var 输出值
    * @return 成功返回 true，失败返回 false
    */
   bool              InfoString(ENUM_DEAL_PROPERTY_STRING prop_id, string &var) const;
   
   /**
    * 格式化交易类型
    * @param str 输出字符串
    * @param action 交易类型
    * @return 格式化后的字符串
    */
   string            FormatAction(string &str, const uint action) const;
   
   /**
    * 格式化交易方向
    * @param str 输出字符串
    * @param entry 交易方向
    * @return 格式化后的字符串
    */
   string            FormatEntry(string &str, const uint entry) const;
   
   /**
    * 格式化交易信息
    * @param str 输出字符串
    * @return 格式化后的交易信息
    */
   string            FormatDeal(string &str) const;
   
   /**
    * 通过索引选择交易
    * @param index 索引位置
    * @return 成功返回 true，失败返回 false
    */
   bool              SelectByIndex(const int index);
};
//+------------------------------------------------------------------+